﻿using System;
using System.Data;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Recomendaciones.Entidades;
using Recomendaciones.AccesoADatos;

/// <summary>
/// Descripción breve de ComentarioPeliculaServices
/// </summary>
public class ComentarioPeliculaServices
{
    Ado _ado;

    #region Constructor y Destructor
    public ComentarioPeliculaServices()
    {
        _ado = new Ado();
    }

    ~ComentarioPeliculaServices()
    {
        _ado = null;
    }
    #endregion

    public string InsertarComentarioPelicula(string pelicula_id, string usuario_id, string comentario, string puntaje)
    {
        try
        {
            if (String.IsNullOrEmpty(comentario) || comentario.Length > 300 || !esAlfanumerico(comentario))
                return "Comentario invalido";
            if (String.IsNullOrEmpty(usuario_id) || !esNumero(usuario_id))
                return "Usuario invalido";
            if (String.IsNullOrEmpty(pelicula_id) || !esNumero(pelicula_id))
                return "Pelicula invalido";
            if (String.IsNullOrEmpty(puntaje) || !esDecimal(puntaje))
                return "Puntaje invalido";

            ArrayList parametros = new ArrayList(4);
            parametros.Add(Convert.ToInt32(pelicula_id));
            parametros.Add(Convert.ToInt32(usuario_id));
            parametros.Add(comentario);
            puntaje = puntaje.Replace('.', ',');
            parametros.Add(Convert.ToDouble(puntaje));

            _ado.EjecutarStoredProcedureDataReader("ComentarioPelicula_Insertar", parametros);
            return _ado.DevolverRegistro();

        }
        catch (Exception ex)
        {
            LogErrorServices logErrorService = new LogErrorServices();
            logErrorService.InsertarLogError(ex.GetType().ToString(), ex.StackTrace, ex.Message, ex.GetBaseException().ToString(), ex.Source);
            return null;
        }
    }

    public List<ComentarioPelícula> ObtenerUltimosComentarios(int id)
    {
        try
        {
            //throw new Exception("ProbandoObtenerUltimosComentarios");
            ArrayList parametros = new ArrayList(1);
            parametros.Add(id);
            _ado.EjecutarStoredProcedureDataReader("ComentarioPelicula_ObtenerUltimosComentarios", parametros);
            DataTable comentarioPeliculas = _ado.DevolverDatosRapido();

            return (List<ComentarioPelícula>)CollectionHelper.ConvertTo<ComentarioPelícula>(comentarioPeliculas);
        }
        catch (Exception ex)
        {
            LogErrorServices logErrorService = new LogErrorServices();
            logErrorService.InsertarLogError(ex.GetType().ToString(), ex.StackTrace, ex.Message, ex.GetBaseException().ToString(), ex.Source);
            return null;
        }
    }

    #region Validaciones

    private bool esAlfanumerico(string cadena)
    {
        System.Text.RegularExpressions.Regex regExobj = new System.Text.RegularExpressions.Regex("^[\\w.,: áéíóúÁÉÍÓÚñÑ]*$");
        return regExobj.IsMatch(cadena);
    }

    private bool esNumero(string cadena)
    {
        System.Text.RegularExpressions.Regex regExobj = new System.Text.RegularExpressions.Regex("^[0-9]*$");
        return regExobj.IsMatch(cadena);
    }

    private bool esDecimal(string cadena)
    {
        Decimal valor;
        return Decimal.TryParse(cadena, out valor);
    }

    #endregion

}
